<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="resource-type" content="document">
<link rel="stylesheet" href="style.css" type="text/css" media="all">
<title>
BOCFEL(6)</title>
</head>
<body>
<table summary="Document Header" class="head">
<tbody>
<tr>
<td class="head-ltitle">
BOCFEL(6)</td>
<td class="head-vol">
Games Manual</td>
<td class="head-rtitle">
BOCFEL(6)</td>
</tr>
</tbody>
</table>
<div class="section">
<h1 id="4e414d45">NAME</h1> <b class="name">bocfel</b> &#8212; <span class="desc">Z&#45;machine interpreter &#60;http://bocfel.googlecode.com/&#62;</span></div>
<div class="section">
<h1 id="53594e4f50534953">SYNOPSIS</h1><table class="synopsis">
<col style="width: 6.00ex;">
<col>
<tbody>
<tr>
<td>
bocfel</td>
<td>
&#91;<span class="opt"><b class="flag">&#45;cCdDefgGklLmrstUxXy</b></span>&#93; &#91;<span class="opt"><b class="flag">&#45;a</b> <i class="arg">eval_stack_size</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;A</b> <i class="arg">call_stack_size</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;E</b> <i class="arg">escape_string</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;n</b> <i class="arg">number</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;N</b> <i class="arg">version</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;R</b> <i class="arg">replay_filename</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;S</b> <i class="arg">record_filename</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;T</b> <i class="arg">transcript_filename</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;u</b> <i class="arg">slots</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;z</b> <i class="arg">seed</i></span>&#93; &#91;<span class="opt"><b class="flag">&#45;Z</b> <i class="arg">device</i></span>&#93; <i class="arg">file</i></td>
</tr>
</tbody>
</table>
<br>
<table class="synopsis">
<col style="width: 6.00ex;">
<col>
<tbody>
<tr>
<td>
bocfel</td>
<td>
<b class="flag">&#45;i</b> <i class="arg">file</i></td>
</tr>
</tbody>
</table>
<br>
<table class="synopsis">
<col style="width: 6.00ex;">
<col>
<tbody>
<tr>
<td>
bocfel</td>
<td>
<b class="flag">&#45;v</b></td>
</tr>
</tbody>
</table>
</div>
<div class="section">
<h1 id="4445534352495054494f4e">DESCRIPTION</h1> <b class="name">bocfel</b> is a Z&#45;machine interpreter.  It fully supports versions 1&#45;5, 7, and 8 of the Z&#45;machine, with extremely limited support for version 6.  It can read stories stored in Blorb files, but has no support for associated graphics, if any exist.<p>
The following options are available:<dl style="margin-top: 0.00em;margin-bottom: 0.00em;" class="list list-tag">
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;a</b> <i class="arg">eval_stack_size</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
The Z&#45;machine contains an evaluation stack which games use as a sort of scratch space when performing calculations.  By default the size of this stack is set at 16384, which should be sufficient for any game.  The entire stack is allocated at once, so if you are on a system with a small amount of memory, setting this to a smaller value will cause less memory to be allocated.<p>
The maximum value is limited only by system memory.  Each evaluation stack entry takes two bytes.  If you ever encounter a &#8220;stack overflow&#8221; message with the default size, please let me know.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;A</b> <i class="arg">call_stack_size</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
The Z&#45;machine allows games to call routines in order to get work done; these routines can call other routines, and so on.  Information about these routines is placed onto the call stack, which by default has a size of 1024.  This means that no more than 1024 routines can be active at any single time.  This value should be much more than sufficient for any game.  As with the evaluation stack, memory for the call stack is allocated at one time, so machines with small amounts of memory can reduce this value to reduce memory consumption.<p>
The maximum value allowable by the Z-machine is 65535.  Each call stack entry takes between 40 and 50 bytes.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;c</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
If the Glk implementation being used is Gargoyle, or if Glk is not being used at all, support for colors is provided.  This option disables color support entirely.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;C</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Do not read the configuration file <i class="file">$HOME/.bocfelrc</i>. Settings in the configuration file take precedence over those specified on the command line, so if you want to override the configuration file, use this option.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;d</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Many Glk implementations allow timed input as used by games such as <span class="emph">Border Zone</span>. This option disables timed input and informs games that timed input is not available.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;D</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
If Gargoyle is being used, sound effects are supported.  This option disables sound effects and informs games that sound effects are not available.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;e</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Turn on ANSI escapes in the transcript. If this option is enabled, all user input in the transcript can be decorated with ANSI escape sequences so it stands out.  See the <b class="flag">&#45;E</b> option.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;E</b> <i class="arg">escape_string</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
If the <b class="flag">&#45;e</b> option is used, this sets the escape string that will be used when highlighting user input in the transcript.  ^[[ is written, then <i class="arg">escape_string</i>, then ^[[0m.  By default &#8220;1m&#8221; is used as the escape string, providing bold text.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;f</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Many Glk implementations allow a fixed&#45;width font to be selected. This option disables fixed&#45;width fonts and informs games that fixed&#45;width fonts are not available. The game might still be displayed using a fixed&#45;width font (e.g.&#8203; if you are playing in a terminal), but the game has no way of knowing this.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;F</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Glk does not allow the mixing of text styles, so it is not possible to request, for example, both fixed&#45;width and reverse video.  If both styles are requested, fixed&#45;width takes precedence.  However, if <b class="name">bocfel</b> is being run in a terminal (with, for example, the glktermw Glk implementation), the font will be fixed at all times.  The <b class="flag">&#45;F</b> flag tells <b class="name">bocfel</b> to assume that the current font is always fixed, allowing other styles to be applied simultaneously.  See the puzzle pieces in Graham Nelson's <span class="emph">Jigsaw</span> for an example of how this can be useful.<p>
See also the <i class="link-sec"><a class="link-sec" href="#5354594c4553">STYLES</a></i> section.  Note that Gargoyle does allow the mixing of styles, so this option does nothing under Gargoyle.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;g</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Disable the character graphics font. See the <i class="link-sec"><a class="link-sec" href="#43484152414354455220475241504849435320464f4e54">CHARACTER GRAPHICS FONT</a></i> section below.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;G</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Most characters in the graphics font map fairly well to Unicode equivalents, but a few box drawing characters do not.  Two methods for drawing the missing characters are provided, each with pros and cons.  A description of the differences is not sufficient, so it is recommended that you try <span class="emph">Beyond Zork</span> both with and without this option, paying attention to the map connections.  See also the <i class="link-sec"><a class="link-sec" href="#43484152414354455220475241504849435320464f4e54">CHARACTER GRAPHICS FONT</a></i> section below.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;i</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Print out the ID of the specified game and exit. This ID is used to uniquely identify a game and is adapted from the Treaty of Babel standard.  Game IDs can be used in the configuration file to set options for specific games. See the <i class="link-sec"><a class="link-sec" href="#434f4e46494755524154494f4e2046494c45">CONFIGURATION FILE</a></i> section for more information.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;k</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
The Z&#45;machine has a concept of &#8220;terminating keys&#8221;. When enabled, these keys, in addition to Enter, terminate input immedately. <span class="emph">Beyond Zork</span>, for example, uses this so that F1 automatically executes &#8220;look around&#8221;, F2 does &#8220;inventory&#8221;, and so on.  However, <span class="emph">Beyond Zork</span> also claims the up arrow, which means that history browsing, in Glk implementations that support it, might not be able to be initiated with the up arrow.  This option disables the use of terminating keys.  Note that not all Glk implementations support terminating keys.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;l</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
When writing out transcripts, a character set must be chosen. By default, UTF&#45;8 is used on Unix systems, and Latin&#45;1 everywhere else. If Glk is not being used, the same character set is used for screen output as well. This option disables UTF&#45;8 and forces Latin&#45;1.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;L</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Force UTF&#45;8. This is the opposite of the <b class="flag">&#45;l</b> option above.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;m</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Disable meta commands.  See <i class="link-sec"><a class="link-sec" href="#4d45544120434f4d4d414e4453">META COMMANDS</a></i> below for more information.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;n</b> <i class="arg">number</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Z&#45;machine interpreters are able to inform games what platform they are running on by setting an interpreter number in the range 1 to 11.  The following are the valid values (taken from Graham Nelson's <span class="emph">Z&#45;Machine Standards Document</span> 1.0):<p>
<ol style="margin-top: 0.00em;margin-bottom: 0.00em;margin-left: 5.00ex;" class="list list-enum">
<li class="list-enum" style="margin-top: 0.00em;">
DECSystem&#45;20</li>
<li class="list-enum" style="margin-top: 0.00em;">
Apple IIe</li>
<li class="list-enum" style="margin-top: 0.00em;">
Macintosh</li>
<li class="list-enum" style="margin-top: 0.00em;">
Amiga</li>
<li class="list-enum" style="margin-top: 0.00em;">
Atari ST</li>
<li class="list-enum" style="margin-top: 0.00em;">
IBM PC</li>
<li class="list-enum" style="margin-top: 0.00em;">
Commodore 128</li>
<li class="list-enum" style="margin-top: 0.00em;">
Commodore 64</li>
<li class="list-enum" style="margin-top: 0.00em;">
Apple IIc</li>
<li class="list-enum" style="margin-top: 0.00em;">
Apple IIgs</li>
<li class="list-enum" style="margin-top: 0.00em;">
Tandy Color</li>
</ol>
<p>
By and large this value is meaningless.  Some Infocom games do make small use of this information: <span class="emph">Trinity</span>, for example, has a &#8220;print emphasized&#8221; routine that is used to print emphasized (which generally means italicized) text; on any machine but the Atari, however, this routine makes sure not to print punctuation in italics. <span class="emph">Beyond Zork</span> makes what is probably the most visible use of the interpreter number, using it to decide how to deal with character graphics. See section 16 of the <span class="emph">Z&#45;Machine Standards Document</span> 1.0 for more information.  By default, the interpreter version is set to 1 becuase this causes <span class="emph">Beyond Zork</span> to prompt the user about the machine he is using, allowing him to select whether or not character graphics are used.<p>
I do not recommend setting this to 11.  At least <span class="emph">Beyond Zork</span> assumes that the largest it will be is 10, and setting it to 11 can cause an out&#45;of&#45;bounds memory access. The instance I have seen of this is not fatal, but there may be other instances that are.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;N</b> <i class="arg">version</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Even more meaningless than the interpreter number is the interpreter version. This, as far as has been determined, is never used except when the user asks a game to either report its version or to verify its disk image. In these cases, the version is simply printed out, nothing more. This is a single character and there is no real reason to change it. The default is C.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;r</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Play back a command record (see <b class="flag">&#45;s</b>) as soon as the game begins.  Some games provide a way to play back a record (typically through the REPLAY verb in Inform&#45;based games, and #comm in some Infocom games), but this option is useful to start playback before you have an opportunity to call REPLAY, or if the game provides no way to play back such a record.<p>
See also the <i class="link-sec"><a class="link-sec" href="#4d45544120434f4d4d414e4453">META COMMANDS</a></i> section.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;R</b> <i class="arg">replay_filename</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
When command&#45;record playback is enabled, you will be prompted for a filename. This prompt can be bypassed by providing a filename here.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;s</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Turn on command recording. This records every keystroke the player makes, and (hopefully) creates a record that is suitable for playback either by using <b class="flag">&#45;r</b> or through a game command.  Some games provide this functionality themselves (typically through the RECORDING verb in Inform&#45;based games, and #reco in some Infocom games), but this option is useful to start recording before you have an opportunity to call RECORDING, or if the game provides no way to start such a record.<p>
See also the <i class="link-sec"><a class="link-sec" href="#4d45544120434f4d4d414e4453">META COMMANDS</a></i> section.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;S</b> <i class="arg">record_filename</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
When command recording is enabled, you will be prompted for a filename. This prompt can be bypassed by providing a filename here.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;t</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Turn on transcripting. This records both the output of the game and user input. If the chosen transcript file exists, it will be appended to, not overwritten. This way you can easily continue a transcript every time you come back to a game.<p>
See also the <b class="flag">&#45;y</b> option and the <i class="link-sec"><a class="link-sec" href="#4d45544120434f4d4d414e4453">META COMMANDS</a></i> section.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;T</b> <i class="arg">transcript_filename</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
When transcripting is enabled, you will be prompted for a filename. This prompt can be bypassed by providing a filename here.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;u</b> <i class="arg">slots</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Some games provide the ability to undo a turn. In fact, some games allow multiple turns to be undone. This option controls how many save slots are available. Unlike the stacks (see <b class="flag">&#45;a</b> and <b class="flag">&#45;A</b>), save slots are dynamic, meaning that unless a game provides support for undo, no memory will be used.  However, games that do support undo will typically take a snapshot each turn, causing memory to be allocated.  The size of each snapshot depends on the game and the current state of play. Memory usage is minimized as much as possible: at the beginning of <span class="emph">Anchorhead</span>, for example, each slot takes up roughly 900 bytes.  As the game progresses, though, the size of a save slot inevitably will increase: near the end of <span class="emph">Anchorhead</span>, my save slots were taking up roughly 4500 bytes.<p>
Note that Inform&#45;based games (at least by default) do not support multiple undo; two non&#45;V6 Infocom games, to my knowledge, do: <span class="emph">Sherlock</span> and <span class="emph">Beyond Zork</span>. However, <b class="name">bocfel</b> includes the ability to perform multiple undo regardless of whether the game provides support for it.  See the <i class="link-sec"><a class="link-sec" href="#4d45544120434f4d4d414e4453">META COMMANDS</a></i> section for more information.<p>
The default value is 10. A value of zero disables undo, and a negative value provides unlimited undo. This is probably a bad idea.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;U</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
One of the ways that undo slots (see <b class="flag">&#45;u</b>) save memory is to use compression. On modern machines the compression time is minuscule and not noticeable. On slower systems, however, it is possible that the compression will be noticeable. This option disables compression, but be aware that without compression, the size really balloons: save slots in <span class="emph">Anchorhead</span>, with compression, take up about 900 bytes on game startup.  Without compression they take up over 40000 bytes.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;v</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Display version information and show which compile&#45;time options are set.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;x</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Most games include abbreviations for commonly&#45;used commands: x for EXAMINE, g for AGAIN, and z for WAIT. Some early Infocom games, however, do not provide these. By default, x, g, and z are mapped to their respective commands regardless of whether the game provides them. In the unlikely event that a game requires one of these letters for its own use, apart from an abbreviation, these abbreviations can be turned off with <b class="flag">&#45;x</b>.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;X</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
The Tandy corporation licensed some Infocom games, but apparently <span class="emph">The Witness</span> was too scary for them, so some words were changed so as not to offend their ridiculously delicate sensibilities. If you want to laugh at Tandy's insecurities, this flag will turn on their censorship. In addition to the mangling of <span class="emph">The Witness</span>, a few other games unnecessarily add mention of Tandy in the output to the VERSION command.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;y</b></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
When transcripting is turned on and an existing file is selected, that file is appended to rather than overwritten. This option causes the file to be overwritten.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;z</b> <i class="arg">seed</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Provide a seed to the pseudo&#45;random number generator, causing it to yield predictable values. This option is probably only of use to game authors who are doing testing.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<b class="flag">&#45;Z</b> <i class="arg">device</i></dt>
<dd class="list-tag" style="margin-left: 6.00ex;">
Provide a device from which a seed for the pseudo&#45;random number generator is read.  This is meant to be used with special files such as <i class="file">/dev/urandom</i>, although it can be used with any file from which at least 32 bits can be read.  The <b class="flag">&#45;z</b> option overrides this option.</dd>
</dl>
</div>
<div class="section">
<h1 id="434f4e46494755524154494f4e2046494c45">CONFIGURATION FILE</h1> <b class="name">bocfel</b> allows to you control its behavior through a configuration file. This obviates the need to provide command&#45;line arguments each time you start a game, as well as allowing customization based on which game is being played.<p>
The configuration file is located in <i class="file">$HOME/.bocfelrc</i>, and a general outline is as follows:<p>
<pre style="margin-left: 5.00ex;" class="lit display">
enable_escape = 1 
disable_color = 1 
 
[1&#45;990831&#45;d8b4] 
disable_color = 0 
 
[57&#45;871221] 
int_number = 1</pre>
<p>
The first lines are general, and apply to all games.  The bracketed lines start a new group based on the ID contained in the brackets (see the <b class="flag">&#45;i</b> option).  Thus disable_color is set to zero only for <i class="arg">1&#45;990831&#45;d8b4</i>, and int_number is set to 1 only for <i class="arg">57&#45;871221</i>. Comments begin with a # and continue to the end of the line. Trailing whitespace is ignored.<p>
The following are all the possible options, which are hopefully self&#45;explanatory:<p>
<ul style="margin-top: 0.00em;margin-bottom: 0.00em;margin-left: 5.00ex;" class="list list-item">
<li class="list-item" style="margin-top: 0.00em;">
eval_stack_size (n)</li>
<li class="list-item" style="margin-top: 0.00em;">
call_stack_size (n)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_color (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_timed (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
enable_escape (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
escape_string (s)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_fixed (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
assume_fixed (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_graphics_font (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
enable_alt_graphics (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_term_keys (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_utf8 (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
force_utf8 (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_meta_commands (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
max_saves (n)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_undo_compression (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
int_number (n)</li>
<li class="list-item" style="margin-top: 0.00em;">
int_version (c)</li>
<li class="list-item" style="margin-top: 0.00em;">
replay_on (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
replay_name (s)</li>
<li class="list-item" style="margin-top: 0.00em;">
record_on (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
record_name (s)</li>
<li class="list-item" style="margin-top: 0.00em;">
transcript_on (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
transcript_name (s)</li>
<li class="list-item" style="margin-top: 0.00em;">
disable_abbreviations (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
enable_censorship (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
overwrite_transcript (b)</li>
<li class="list-item" style="margin-top: 0.00em;">
random_seed (n)</li>
<li class="list-item" style="margin-top: 0.00em;">
random_device (s)</li>
</ul>
<p>
The parenthesized character describes the type of argument: b is a boolean (1 is true, 0 is false), c is a character, n is a number, and s is a string.  These all correspond to possible command&#45;line arguments.<p>
In addition to analogs to the command&#45;line arguments, there are a couple of options that can be set only through the configuration file. One is &#8220;cheat&#8221;: see the <i class="link-sec"><a class="link-sec" href="#4348454154494e47">CHEATING</a></i> section below.  The other is fine&#45;grained control over colors in Gargoyle; this does not apply to any other build types.<p>
At the most basic, there are 8 colors that the Z&#45;machine can use, corresponding to ANSI colors: black, red, green, yellow, blue, magenta, cyan, and white.  The syntax for setting these is:<p>
<pre style="margin-left: 5.00ex;" class="lit display">
color_red = 0xc23621</pre>
<p>
The color is specified as a 24&#45;bit RGB value, 8 bits per color.  The above is thus 0xc2 red, 0x36 green, and 0x21 blue.  The value must be specified in hexadecimal, with an optional leading 0x.</div>
<div class="section">
<h1 id="5354594c4553">STYLES</h1> The Z&#45;machine allows for different text styles to be selected: these are emphasized (typically italicized or underlined), bold, and reverse video.  In addition, a fixed&#45;width font can be selected.  Glk does not guarantee the appearance of styles; it only allows you to select from a list of uses, rather than appearances.  The following Glk styles are how <b class="name">bocfel</b> maps the Z-machine's text styles:<p>
Italic (or emphasized) uses the Emphasized style.  Bold uses the Subheader style.  Reverse video uses the Alert style.  Fixed&#45;width uses the Preformatted style.<p>
These were chosen because they map appropriately in the glktermw Glk implementation.  If your Glk implementation does not render these styles in a manner you like, consult its documentation to see if it is possible to change the appearance of the various Glk styles.<p>
Gargoyle, although a Glk implementation, does not have these issues. The combination of styles is possible, and the appearance of styles can be guaranteed.</div>
<div class="section">
<h1 id="43484152414354455220475241504849435320464f4e54">CHARACTER GRAPHICS FONT</h1> <span class="emph">Beyond Zork</span> can make use of a character graphics font. This font is used for drawing the interactive map, arrows, and runes. Most of the runes and arrows have Unicode equivalents and can be displayed if you have a font that contains these characters. Unicode also includes box&#45;drawing characters which can be used to approximate the map in <span class="emph">Beyond Zork</span>. These are not perfect, but they are not terrible.<p>
The <b class="flag">&#45;g</b> option disables the character graphics font, but unfortunately the ability to tell a game that a particular font is unavailable postdates Infocom, so this flag will not prevent <span class="emph">Beyond Zork</span> from trying to use it. Instead, <span class="emph">Beyond Zork</span> makes use of the interpreter number (see <b class="flag">&#45;n</b>) to decide whether to use character graphics. If you are using a font that does not provide the necessary Unicode characters, you will want to run <span class="emph">Beyond Zork</span> without the character graphics font. This is easily accomplished by answering &#8220;&#8203;No&#8221; when the game asks you if you are using a VT&#45;220 (this only happens when the interpreter number is set to 1, which is the default).<p>
If the character font is disabled with <b class="flag">&#45;g</b> and a game tries to use it anyway (as is the case with <span class="emph">Beyond Zork</span>), the output will appear garbled, but only for that font. Anything the game prints out in a normal font will look fine.<p>
See section 16 of the <span class="emph">Z&#45;Machine Standards Document</span> 1.0 for more information.</div>
<div class="section">
<h1 id="4d45544120434f4d4d414e4453">META COMMANDS</h1> <b class="name">bocfel</b> includes support for &#8220;meta commands&#8221;, which are commands interpreted by <b class="name">bocfel</b> itself instead of the game.  These are introduced with a slash (&#8216;<span class="symb">/</span>&#39;), chosen in an attempt to not clash with game commands.  These meta commands can be entered at any point the game requests user input, e.g.&#8203; on each turn.  They are as follows, and are case sensitive:<dl style="margin-top: 0.00em;margin-bottom: 0.00em;margin-left: 5.00ex;" class="list list-tag">
<dt class="list-tag" style="margin-top: 1.00em;">
<span class="symb">/undo</span></dt>
<dd class="list-tag" style="margin-left: 10.00ex;">
Undo a turn.  This is similar to the UNDO command some games provide, but has two distinct advantages: it works even in games that do not provide undo, and it provides multiple undo even in games which do not support multiple undo.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<span class="symb">/scripton</span></dt>
<dd class="list-tag" style="margin-left: 10.00ex;">
Start a transcript.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<span class="symb">/scriptoff</span></dt>
<dd class="list-tag" style="margin-left: 10.00ex;">
Stop a transcript.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<span class="symb">/recon</span></dt>
<dd class="list-tag" style="margin-left: 10.00ex;">
Start a command record.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<span class="symb">/recoff</span></dt>
<dd class="list-tag" style="margin-left: 10.00ex;">
Stop a command record.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<span class="symb">/replay</span></dt>
<dd class="list-tag" style="margin-left: 10.00ex;">
Replay a command record.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<span class="symb">/save</span></dt>
<dd class="list-tag" style="margin-left: 10.00ex;">
Save the game.  This creates save files that are incompatible with those created by SAVE, so they should only be restored with <span class="symb">/restore</span>. <b class="name">bocfel</b> has built-in protection to prevent a file saved with a normal SAVE command from being confused with one saved by <span class="symb">/save</span>, and vice versa.<p>
Because it creates non-standard save files, this command should be avoided unless it is absoulutely necessary, e.g.&#8203; if the game has disabled saving.  It was added to <b class="name">bocfel</b> solely for the case of such anti-social games.</dd>
<dt class="list-tag" style="margin-top: 1.00em;">
<span class="symb">/restore</span></dt>
<dd class="list-tag" style="margin-left: 10.00ex;">
Restore a game saved by <span class="symb">/save</span>. Do not attempt to use <span class="symb">/restore</span> to restore games saved with a normal SAVE command.</dd>
</dl>
<p>
Please note that <span class="symb">/save</span> and <span class="symb">/restore</span> are experimental.</div>
<div class="section">
<h1 id="534f554e442045464645435453">SOUND EFFECTS</h1> Currently, sound effects are only available when Gargoyle is used as the Glk implementation.  The sound effects should be bundled in a Blorb file, which must be named as follows: if the story file is <i class="file">/foo/bar/sherlock.z5</i>, then the blorb file must be <i class="file">/foo/bar/sherlock.blb</i>. Sound effect support is experimental and does not currently conform fully to the Z&#45;machine standard.  Bleeps are not supported, nor is section 9.4.4, nor is the hack regarding <span class="emph">The Lurking Horror mentioned</span> in the Remarks section.</div>
<div class="section">
<h1 id="4348454154494e47">CHEATING</h1> There is extremely rudimentary support for &#8220;cheating&#8221;. <b class="name">bocfel</b> is able to freeze certain areas of memory so that they always report the same value. The idea behind this is to prevent hunger and thirst counters from forcing you to eat and drink.<p>
Cheating is only available through the configuration file, and is treated like any configuration variable. Following is an example which contains the only five cheats I've taken the time to figure out so far:<p>
<pre style="margin-left: 5.00ex;" class="lit display">
# Enchanter 
[29&#45;860820] 
# Always able to drink, but never dying of thirst. 
cheat = freezew:0x24c5:50 
# Always able to eat, but never dying of hunger. 
cheat = freezew:0x24bf:50 
 
# Alternative (perhaps better) method for the above: 
 
# The "water object" never diminishes. 
cheat = freezew:0x1c09:4 
# The "bread object" never diminishes. 
cheat = freezew:0xf68:8 
 
# Cutthroats 
[23&#45;840809] 
# Never thirsty. 
cheat = freezew:0x24be:100</pre>
<p>
The syntax is as follows: freezew:<span class="symb">address</span>:<span class="symb">value</span>.<p>
This causes the word (a 16&#45;bit value) at address <span class="symb">address</span> to always contain the value <span class="symb">value</span>. The address must be specified in hexadecimal, with an optional leading 0x; the value is interpreted as an integer constant in C: leading 0x means hexadecimal, leading 0 means octal, otherwise decimal. Alternatively, instead of an actual address for <span class="symb">address</span>, a global variable can be specified.  This has the syntax <span class="symb">Gxx</span>, where <span class="symb">xx</span> is a hexadecimal value in the range [0, 239], corresponding to global variables 0 to 239.<p>
An explanation of how to figure out cheats is beyond the scope of this document.<p>
The above cheats for <span class="emph">Enchanter</span> and <span class="emph">Cutthroats</span> have not been extensively tested. They may render the games unwinnable. Use at your own risk.<p>
Please note that it is possible for <b class="name">bocfel</b> to be built without support for cheating, in which case these cheats will silently do nothing.  The <b class="flag">&#45;v</b> option can be used to determine whether this is the case.</div>
<div class="section">
<h1 id="415554484f5253">AUTHORS</h1> <span class="author">Chris Spiegel</span> &#60;cspiegel@gmail.com&#62;</div>
<div class="section">
<h1 id="53454520414c534f">SEE ALSO</h1> <a class="link-man">frotz(6)</a>, <a class="link-man">nitfol(6)</a>, <a class="link-man">fizmo(6)</a>, <a class="link-man">iconv(1)</a></div>
<div class="section">
<h1 id="5354414e4441524453">STANDARDS</h1> <b class="name">bocfel</b> is believed to comply fully with version 1.1 of the <span class="emph">Z&#45;machine Standards Document</span>; see http://www.inform&#45;fiction.org/zmachine/standards/z1point0/index.html and http://ifarchive.org/if&#45;archive/infocom/interpreters/specification/ZSpec11.txt.</div>
<table summary="Document Footer" class="foot">
<tbody>
<tr>
<td class="foot-date">
June 26, 2011</td>
<td class="foot-os">
</td>
</tr>
</tbody>
</table>
</body>
</html>

